package cn.javass.dp.command.example6;


import java.util.ArrayList;
import java.util.List;

/**
 * 命令队列类
 */
public class CommandQueue {
    /**
     * 用来存储命令的队列
     * java.util.Queue 没用，简化操作
     * Queue实现LinkedList类 要求存放的对象是可排序的。。。。为了简洁
     */
    private static List<Command> cmds = new ArrayList<>();

    /**
     * 服务员传来新的菜单
     * 需求同步：是因为同时传来菜单，厨师也同时在取菜单
     * @param menu
     */
    public  synchronized static void addMenu(MenuCommand menu) {
        //一个菜单 包含很多个菜  多个命令对象
        for (Command cmd : menu.getCommands()) {
            cmds.add(cmd);
        }
    }

    /**
     * 厨师从菜单里面取出某个菜进行处理，也是同步的
     * @return
     */
    public synchronized static Command getOneCommand() {
        Command cmd  = null;
        if (cmds.size() > 0) {
            cmd  = cmds.get(0);  //取出最先传上去的菜命令
            cmds.remove(0);//取出菜之后 在菜单中取消这道菜 以免重复*********
        }
        return  cmd;
    }
}
